package com.ruoyi.cs.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.ruoyi.common.core.domain.Response;
import com.ruoyi.cs.domain.TBox;
import com.ruoyi.cs.domain.TGoods;
import com.ruoyi.cs.domain.vo.TBoxVo;
import com.ruoyi.common.core.domain.AjaxResult;
import org.apache.ibatis.annotations.Param;

/**
 * 箱子信息Service接口
 * 
 * @author ruoyi
 * @date 2021-03-25
 */
public interface ITBoxService 
{
    /**
     * 查询箱子信息
     * 
     * @param boxId 箱子信息ID
     * @return 箱子信息
     */
    public TBoxVo selectTBoxById(String boxId);
    public TBox getInfoTbox(String boxId);
    /**
     * 查询箱子信息列表
     * 
     * @param tBox 箱子信息
     * @return 箱子信息集合
     */
    public List<TBox> selectTBoxList(TBox tBox);

    /**
     * 查询箱子列表，不包含最贵饰品图片
     * @param tBox
     * @return
     */
    public List<TBox> queryTBoxList();

    /**
     * 新增箱子信息
     * 
     * @param tBox 箱子信息
     * @return 结果
     */
    public int insertTBox(TBox tBox);

    /**
     * 修改箱子信息
     * 
     * @param tBox 箱子信息
     * @return 结果
     */
    public int updateTBox(TBox tBox);

    /**
     * 批量删除箱子信息
     * 
     * @param boxIds 需要删除的箱子信息ID
     * @return 结果
     */
    public int deleteTBoxByIds(String[] boxIds);

    /**
     * 删除箱子信息信息
     * 
     * @param boxId 箱子信息ID
     * @return 结果
     */
    public int deleteTBoxById(String boxId);

    /**
     * 批量停用箱子
     * @param boxIds
     * @return
     */
    public int bacthStopTBox(String[] boxIds);

    /**
     * 批量启用箱子
     * @param boxIds
     * @return
     */
    public Response bacthEnableTBox(String[] boxIds);


    /**
     * 根据箱子ID获取对应的饰品列表
     * @param boxId
     * @return
     */
    public  List<TGoods> goodsListByBoxId(String boxId);
    public  List<Map> goodsChance(String boxId);

    /**
     * 获取箱子可打开次数
     * @param userId
     * @param boxId
     * @return
     */
    public Map<String,Integer> openableNum(String userId,String boxId);

    /**
     * 普通新用户保底开箱
     * @param userId
     * @param boxId
     * @param num
     * @return
     */
//    public Response<List<TGoods>> unpacking(String userId, String boxId, Integer num) throws Exception;

    /**
     * 概率+奖池开箱算法
     * @param userId
     * @param boxId
     * @param num
     * @return
     * @throws Exception
     */
    public Response<List<TGoods>> oddNumUnpacking(String userId, String boxId, Integer num) throws Exception;



    /**
     * 后台箱子管理列表
     * @param tBoxVo
     * @return
     */
    public List<TBoxVo> boxListBack(TBoxVo tBoxVo);

    /**
     * 开箱统计
     * @return
     */
    public Response<Map> unpackingCount();

    /**
     * 后台开箱统计列表
     * @param tBoxVo
     * @return
     */
    public List<TBoxVo> boxListBackCount(TBoxVo tBoxVo);

    /**
     * 修改箱子首开状态
     * @param tBox
     * @return
     */
    public int updateTBoxFirstStatus(TBox tBox);


    public Map<String, BigDecimal> boxCount(String startTime, String endTime, String boxType);


    /**
     * 根据箱子ID获取箱子下的饰品列表
     * @param boxId
     * @return
     */
    public List<TGoods> GoodsListBox(String boxId);

    public List<TGoods> openBoxRule(List<TGoods> tGoodsList,String boxId,int cs);

    public Response<Map> openBoxRuleTest(String boxId,int cs);

    /**
     * 查询箱子列表
     * @return
     */
    public Response<Map> getList();

    public Response<List<TGoods>> robotUnpacking(String userId, String boxId, Integer num) throws Exception;

    /**
     * 复制箱子
     *
     * @param boxIds
     * @return
     */
    public Response copyBox(@Param("boxIds") List<String> boxIds);

    /**
     * 查询箱子列表
     * @param type 0 开箱  1 对战
     * @return
     */
    public List<TBox> getBattleBoxList(String type,String boxTitleId,String sortBy);


    /**
     * 查询充值积分盲盒或者积分盲盒
     * @param type 2 充值积分盲盒  3 推广积分盲盒
     * @return
     */
    public List<TBox> activityBoxList(String type);

    /**
     * @Desc: 使用hash算法开箱
     * @author: zz
     * @date: 2023/12/6
     */
    public Response<List<TGoods>> openBoxHash(String userId, String boxId, Integer num);


    /**
     * @Desc: hash开箱测试
     * @author: zz
     * @date: 2024/2/22
     */
    public Response<Map> openBoxHashTest(String userSeed,String boxId,int cs);

    /**
     * @Desc: 统计秘钥出现的概率区间
     * @author: zz
     * @date: 2024/2/28
     */
    public Response hashTest(String userSeed,int cs,int partitionSize);

}
